다이나믹 프로그래밍 [C/C++] 백준(BOJ) 1149 RGB거리 문제에서 i번째 집과 i-1번째 집은 색이 달라야 한다고 주어졌다. 또한 모든 집을 칠하는데 드는 비용의 최솟값을 구해야하므로 i번째 집까지의 최소 비용을 dp배열에 갱신하면서 진행해 N번째 집의 최소 비용을 구할 것이다. 하지만 이 때 처음에 어떤 집을 칠했는 지는 3가지 경우의 수(R,G,B)를 모두 고려해야하므로 dp배열을 dp[N][3]과 같이 선언하여 최솟값을 갱신하면 된다! 그 후... 다이나믹 프로그래밍백준CC [C/C++] 백준(BOJ) 1463 1로 만들기 문제에서는 3가지 연산을 사용하여 주어진 정수 N을 1로 만드는 연산의 횟수의 최솟값을 구해야 한다. 하지만 각각의 수 별로 최솟값이 되는 방식은 갖가지이므로 우리는 N 전까지의 모든 수들의 1로 만드는 연산의 최솟값을 dp배열에 연산 횟수를 갱신하면서 올라가 N의 최소 연산 횟수를 구해야 한다. 시간복잡도는 N이고, N은 1,000,000까지므로 시간제한인 0.15초안에 충분히 들어온다. ... 다이나믹 프로그래밍백준CC [C/C++] 백준(BOJ) 1932 정수 삼각형 구하는 것은 정수 삼각형에서 합이 최대가 되는 경로이다. 필자는 경로를 구성할 때 아래에서 위로 올라오면서 각 구간에서의 합의 최댓값을 갱신하는 방법을 사용했다. 한번 방문한 지점은 다시 갱신될 필요가 없기 때문에 dp에 값이 존재할 때는 해당 dp값을 반환해주고 재귀랑 dp를 사용해 dp[x][y] = max(triangle(x + 1, y), triangle(x + 1, y + 1)) +... 다이나믹 프로그래밍백준CC [백준] #1463 - 1로 만들기 BFS를 사용하여 풀었다. 문제를 풀고나니 다이나믹 프로그래밍으로 분류되어 있길래 다이나믹 프로그래밍을 이용해서 다시 풀어봤다. BFS로 구할 때는 n부터 계산했는데, DP로 구할 때는 1부터 계산했다. 채점 결과, 위의 BFS를 이용한 코드가 아래 DP를 이용한 코드보다 더 빠르다. DP를 이용한 코드는 모든 경우를 비교하며 계산해서 더 오래 걸리는 것 같다.... 백준다이나믹 프로그래밍알고리즘다이나믹 프로그래밍 코테 2021 - 6강 (다이나믹 프로그래밍) 큰 문제를 작은 문제로 나눌 수 있으며 작은 문제의 답을 모아서 큰 문제를 해결 가능 그럼 어떻게 시간 복잡도를 줄 일 수 있을 까? 시간 복잡도를 O(N)까지 줄일 수 있다. 보텀업(DP 테이블) 먼저 그리디, 구현, 완전 탐색 등 아이디어로 풀 수 있는지 확인 일단 재귀 함수로 비효율적인 완전 탐색 프로그램을 작성한 뒤에 (탑다운) 작은 문제에서 구한 답이 큰 문제에서 그대로 사용될 수 ... 다이나믹 프로그래밍다이나믹 프로그래밍 [알고스팟] 폴리오미노 n=1인 사각형에 하나씩 추가해가면서 경우의 수를 더해가는 문제라고 생각을 했다. 어디다 붙일지에 대한 방법도 매번 달라져서 더 복잡해진다. 책을 보면 위에서부터 한줄 한줄 세어 간다. 각 줄이 세로로 붙어있으면 된다. 나는 남은 사각형의 개수와 현재 줄에 세로로 쌓으려는 사각형의 개수만 알면 된다. 이전의 과정을 보지 않는 것이다. 바로 다음 파란색이다. 현재 남은 블록을 n, 이번 세로줄... 다이나믹 프로그래밍알고리즘알고스팟다이나믹 프로그래밍 백준 11727 2×n 타일링 2 2×n 직사각형을 1×2, 2×1과 2×2 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오. 아래 그림은 2×17 직사각형을 채운 한가지 예이다. 입력 첫째 줄에 n이 주어진다. (1 ≤ n ≤ 1,000) 출력 첫째 줄에 2×n 크기의 직사각형을 채우는 방법의 수를 10,007로 나눈 나머지를 출력한다. 예제 입력 1 예제 출력 1 예제 입력 2 예제 출력 2 예제 입력 3 예제 출... python알고리즘다이나믹 프로그래밍백준python 백준 16194 / 카드 구매하기 2 설명 카드 N개를 구매해야한다. 카드팩은 총 N가지 종류가 존재한다. i번째 카드팩은 i개의 카드를 담고있고, 가격은 P[i]원 이다. 카드 N개를 구매하는 비용의 최대값을 구하는 문제 D[i] = 카드i개 구매하는 최대 비용 카드 i개를 구매하는 방법은? 카드 1개가 들어있는 카드팩을 구매하고, 카드 i-1개를 구매 • P[1] + D[i-1] 카드 2개가 들어있는 카드팩을 구매하고, 카드... 백준다이나믹 프로그래밍다이나믹 프로그래밍 [백준] 9251번 : LCS (python 파이썬) 백준다이나믹 프로그래밍문자열다이나믹 프로그래밍 [프로그래머스] N으로 표현 (python 파이썬) 이전에 구한 값을 이용하여 풀면된다 set을 이용하여 중복을 제거하면 연산량이 줄어든다 뇌절을 크게하여 오래 걸린 문제였다ㅠㅠ 5를 구할려면 1집합+4집합 이런식으로 더해야하는데 3집합+4집합 이런식으로 N-2, N-1 집합으로 연산을 해서 시간초과가 계속 나왔었다ㅎㅎ..... 프로그래머스다이나믹 프로그래밍다이나믹 프로그래밍 [백준] 2096번 내려가기 3 x n board에서 내려가면서 최댓값, 최솟값 구하기 접근 처음에 간단한 DP라고 생각했다 난관1 그대로 구현하니 메모리 초과가 났다 살짝 멘붕올뻔 했지만 마음을 가다듬고 생각해봤다 처음에 n x 3이 아니라 n x 1 크기로 만들어볼까 했지만 이전 경로도 알아야 되기 때문에 그건 안 된다는걸 알았다 해결 DP 리스트를 생각해보니 바로 이전 값들만 참조하면 되기 때문에 굳이 n개만큼 만... 다이나믹 프로그래밍다이나믹 프로그래밍 [백준] 10942번 팰린드롬? 2000개 숫자가 주어짐 100만개 start, end 인덱스가 주어짐 start ~ end 가 팰린드롬이면 1, 아니면 0 출력 dp 배열을 놓는다 dp[s][e] : s~e가 팰린드롬이면 1, 아니면 0 양 끝이 같고 사이가 팰린드롬이면 1 bottom-up으로 순회 즉, 사이가 bottom 숫자가 2000개라 O(N^2) 가능... 다이나믹 프로그래밍다이나믹 프로그래밍 백준 ) 합분해 0부터 N까지의 정수 K개를 더해서 그 합이 N이 되는 경우의 수를 구하는 프로그램을 작성하시오. 덧셈의 순서가 바뀐 경우는 다른 경우로 센다(1+2와 2+1은 서로 다른 경우). 또한 한 개의 수를 여러 번 쓸 수도 있다. 첫째 줄에 두 정수 N(1 ≤ N ≤ 200), K(1 ≤ K ≤ 200)가 주어진다. 첫째 줄에 답을 1,000,000,000으로 나눈 나머지를 출력한다.... 다이나믹 프로그래밍다이나믹 프로그래밍 <BOJ>11726번: 2xn 타일링 1x2, 2x1 타일로 직사각형을 직접 채워보면 일정한 패턴이 반복된다. 결론적으로 피보나치 수열과 같은 꼴의 점화식을 도출하게 된다.... Java백준boj다이나믹 프로그래밍DPDP [프로그래머스] 풍선 터트리기 서로 다른 숫자 리스트가 주어짐 임의의 인접한 숫자 중 큰 숫자만 지울 수 있음 한 번만 작은 숫자를 지울 수 있음 마지막으로 남길 수 있는 숫자의 개수 리턴 모든 숫자를 돌면서 왼쪽의 큰 숫자들을 모두 제거 오른쪽의 큰 숫자들을 모두 제거 왼쪽 < 가운데 > 오른쪽이면 불가능 나머지 가능 O(N^2) 이라 시간 초과 어차피 모두 서로 다른 수이기 때문에 모두 제거 가능 모두 제거하면 최솟값... 다이나믹 프로그래밍프로그래머스다이나믹 프로그래밍 1103. 게임 기존의 그래프 문제와 다르게, visited와 cycle 두개의 확인 지표가 필요하다. 처음에는 기존의 maze 문제처럼 BFS로 풀려고했다. 왔던 타일을 다시 오는 경우가 발생할 수 있기 때문에 BFS로 풀 수 없다는 것을 알게되었다. DFS로 변경했더니, visited를 설정해 줄 수 없어서 recursion 횟수가 급증했다. visited 배열을 DP로 활용하고, 무한번 왔다갔다 하는것... 백트래킹다이나믹 프로그래밍다이나믹 프로그래밍 백준 ) 제곱수의 합 어떤 자연수 N은 그보다 작거나 같은 제곱수들의 합으로 나타낼 수 있다. 예를 들어 11=32+12+12(3개 항)이다. 이런 표현방법은 여러 가지가 될 수 있는데, 11의 경우 11=22+22+12+12+12(5개 항)도 가능하다. 이 경우, 수학자 숌크라테스는 “11은 3개 항의 제곱수 합으로 표현할 수 있다.”라고 말한다. 또한 11은 그보다 적은 항의 제곱수 합으로 표현할 수 없으므로... 다이나믹 프로그래밍다이나믹 프로그래밍 [Java] LeetCode - Counting Bits 다이나믹 프로그래밍다이나믹 프로그래밍
[C/C++] 백준(BOJ) 1149 RGB거리 문제에서 i번째 집과 i-1번째 집은 색이 달라야 한다고 주어졌다. 또한 모든 집을 칠하는데 드는 비용의 최솟값을 구해야하므로 i번째 집까지의 최소 비용을 dp배열에 갱신하면서 진행해 N번째 집의 최소 비용을 구할 것이다. 하지만 이 때 처음에 어떤 집을 칠했는 지는 3가지 경우의 수(R,G,B)를 모두 고려해야하므로 dp배열을 dp[N][3]과 같이 선언하여 최솟값을 갱신하면 된다! 그 후... 다이나믹 프로그래밍백준CC [C/C++] 백준(BOJ) 1463 1로 만들기 문제에서는 3가지 연산을 사용하여 주어진 정수 N을 1로 만드는 연산의 횟수의 최솟값을 구해야 한다. 하지만 각각의 수 별로 최솟값이 되는 방식은 갖가지이므로 우리는 N 전까지의 모든 수들의 1로 만드는 연산의 최솟값을 dp배열에 연산 횟수를 갱신하면서 올라가 N의 최소 연산 횟수를 구해야 한다. 시간복잡도는 N이고, N은 1,000,000까지므로 시간제한인 0.15초안에 충분히 들어온다. ... 다이나믹 프로그래밍백준CC [C/C++] 백준(BOJ) 1932 정수 삼각형 구하는 것은 정수 삼각형에서 합이 최대가 되는 경로이다. 필자는 경로를 구성할 때 아래에서 위로 올라오면서 각 구간에서의 합의 최댓값을 갱신하는 방법을 사용했다. 한번 방문한 지점은 다시 갱신될 필요가 없기 때문에 dp에 값이 존재할 때는 해당 dp값을 반환해주고 재귀랑 dp를 사용해 dp[x][y] = max(triangle(x + 1, y), triangle(x + 1, y + 1)) +... 다이나믹 프로그래밍백준CC [백준] #1463 - 1로 만들기 BFS를 사용하여 풀었다. 문제를 풀고나니 다이나믹 프로그래밍으로 분류되어 있길래 다이나믹 프로그래밍을 이용해서 다시 풀어봤다. BFS로 구할 때는 n부터 계산했는데, DP로 구할 때는 1부터 계산했다. 채점 결과, 위의 BFS를 이용한 코드가 아래 DP를 이용한 코드보다 더 빠르다. DP를 이용한 코드는 모든 경우를 비교하며 계산해서 더 오래 걸리는 것 같다.... 백준다이나믹 프로그래밍알고리즘다이나믹 프로그래밍 코테 2021 - 6강 (다이나믹 프로그래밍) 큰 문제를 작은 문제로 나눌 수 있으며 작은 문제의 답을 모아서 큰 문제를 해결 가능 그럼 어떻게 시간 복잡도를 줄 일 수 있을 까? 시간 복잡도를 O(N)까지 줄일 수 있다. 보텀업(DP 테이블) 먼저 그리디, 구현, 완전 탐색 등 아이디어로 풀 수 있는지 확인 일단 재귀 함수로 비효율적인 완전 탐색 프로그램을 작성한 뒤에 (탑다운) 작은 문제에서 구한 답이 큰 문제에서 그대로 사용될 수 ... 다이나믹 프로그래밍다이나믹 프로그래밍 [알고스팟] 폴리오미노 n=1인 사각형에 하나씩 추가해가면서 경우의 수를 더해가는 문제라고 생각을 했다. 어디다 붙일지에 대한 방법도 매번 달라져서 더 복잡해진다. 책을 보면 위에서부터 한줄 한줄 세어 간다. 각 줄이 세로로 붙어있으면 된다. 나는 남은 사각형의 개수와 현재 줄에 세로로 쌓으려는 사각형의 개수만 알면 된다. 이전의 과정을 보지 않는 것이다. 바로 다음 파란색이다. 현재 남은 블록을 n, 이번 세로줄... 다이나믹 프로그래밍알고리즘알고스팟다이나믹 프로그래밍 백준 11727 2×n 타일링 2 2×n 직사각형을 1×2, 2×1과 2×2 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오. 아래 그림은 2×17 직사각형을 채운 한가지 예이다. 입력 첫째 줄에 n이 주어진다. (1 ≤ n ≤ 1,000) 출력 첫째 줄에 2×n 크기의 직사각형을 채우는 방법의 수를 10,007로 나눈 나머지를 출력한다. 예제 입력 1 예제 출력 1 예제 입력 2 예제 출력 2 예제 입력 3 예제 출... python알고리즘다이나믹 프로그래밍백준python 백준 16194 / 카드 구매하기 2 설명 카드 N개를 구매해야한다. 카드팩은 총 N가지 종류가 존재한다. i번째 카드팩은 i개의 카드를 담고있고, 가격은 P[i]원 이다. 카드 N개를 구매하는 비용의 최대값을 구하는 문제 D[i] = 카드i개 구매하는 최대 비용 카드 i개를 구매하는 방법은? 카드 1개가 들어있는 카드팩을 구매하고, 카드 i-1개를 구매 • P[1] + D[i-1] 카드 2개가 들어있는 카드팩을 구매하고, 카드... 백준다이나믹 프로그래밍다이나믹 프로그래밍 [백준] 9251번 : LCS (python 파이썬) 백준다이나믹 프로그래밍문자열다이나믹 프로그래밍 [프로그래머스] N으로 표현 (python 파이썬) 이전에 구한 값을 이용하여 풀면된다 set을 이용하여 중복을 제거하면 연산량이 줄어든다 뇌절을 크게하여 오래 걸린 문제였다ㅠㅠ 5를 구할려면 1집합+4집합 이런식으로 더해야하는데 3집합+4집합 이런식으로 N-2, N-1 집합으로 연산을 해서 시간초과가 계속 나왔었다ㅎㅎ..... 프로그래머스다이나믹 프로그래밍다이나믹 프로그래밍 [백준] 2096번 내려가기 3 x n board에서 내려가면서 최댓값, 최솟값 구하기 접근 처음에 간단한 DP라고 생각했다 난관1 그대로 구현하니 메모리 초과가 났다 살짝 멘붕올뻔 했지만 마음을 가다듬고 생각해봤다 처음에 n x 3이 아니라 n x 1 크기로 만들어볼까 했지만 이전 경로도 알아야 되기 때문에 그건 안 된다는걸 알았다 해결 DP 리스트를 생각해보니 바로 이전 값들만 참조하면 되기 때문에 굳이 n개만큼 만... 다이나믹 프로그래밍다이나믹 프로그래밍 [백준] 10942번 팰린드롬? 2000개 숫자가 주어짐 100만개 start, end 인덱스가 주어짐 start ~ end 가 팰린드롬이면 1, 아니면 0 출력 dp 배열을 놓는다 dp[s][e] : s~e가 팰린드롬이면 1, 아니면 0 양 끝이 같고 사이가 팰린드롬이면 1 bottom-up으로 순회 즉, 사이가 bottom 숫자가 2000개라 O(N^2) 가능... 다이나믹 프로그래밍다이나믹 프로그래밍 백준 ) 합분해 0부터 N까지의 정수 K개를 더해서 그 합이 N이 되는 경우의 수를 구하는 프로그램을 작성하시오. 덧셈의 순서가 바뀐 경우는 다른 경우로 센다(1+2와 2+1은 서로 다른 경우). 또한 한 개의 수를 여러 번 쓸 수도 있다. 첫째 줄에 두 정수 N(1 ≤ N ≤ 200), K(1 ≤ K ≤ 200)가 주어진다. 첫째 줄에 답을 1,000,000,000으로 나눈 나머지를 출력한다.... 다이나믹 프로그래밍다이나믹 프로그래밍 <BOJ>11726번: 2xn 타일링 1x2, 2x1 타일로 직사각형을 직접 채워보면 일정한 패턴이 반복된다. 결론적으로 피보나치 수열과 같은 꼴의 점화식을 도출하게 된다.... Java백준boj다이나믹 프로그래밍DPDP [프로그래머스] 풍선 터트리기 서로 다른 숫자 리스트가 주어짐 임의의 인접한 숫자 중 큰 숫자만 지울 수 있음 한 번만 작은 숫자를 지울 수 있음 마지막으로 남길 수 있는 숫자의 개수 리턴 모든 숫자를 돌면서 왼쪽의 큰 숫자들을 모두 제거 오른쪽의 큰 숫자들을 모두 제거 왼쪽 < 가운데 > 오른쪽이면 불가능 나머지 가능 O(N^2) 이라 시간 초과 어차피 모두 서로 다른 수이기 때문에 모두 제거 가능 모두 제거하면 최솟값... 다이나믹 프로그래밍프로그래머스다이나믹 프로그래밍 1103. 게임 기존의 그래프 문제와 다르게, visited와 cycle 두개의 확인 지표가 필요하다. 처음에는 기존의 maze 문제처럼 BFS로 풀려고했다. 왔던 타일을 다시 오는 경우가 발생할 수 있기 때문에 BFS로 풀 수 없다는 것을 알게되었다. DFS로 변경했더니, visited를 설정해 줄 수 없어서 recursion 횟수가 급증했다. visited 배열을 DP로 활용하고, 무한번 왔다갔다 하는것... 백트래킹다이나믹 프로그래밍다이나믹 프로그래밍 백준 ) 제곱수의 합 어떤 자연수 N은 그보다 작거나 같은 제곱수들의 합으로 나타낼 수 있다. 예를 들어 11=32+12+12(3개 항)이다. 이런 표현방법은 여러 가지가 될 수 있는데, 11의 경우 11=22+22+12+12+12(5개 항)도 가능하다. 이 경우, 수학자 숌크라테스는 “11은 3개 항의 제곱수 합으로 표현할 수 있다.”라고 말한다. 또한 11은 그보다 적은 항의 제곱수 합으로 표현할 수 없으므로... 다이나믹 프로그래밍다이나믹 프로그래밍 [Java] LeetCode - Counting Bits 다이나믹 프로그래밍다이나믹 프로그래밍